import axios from 'axios';
import iView, { Modal } from 'iview';
const REQUEST_HOST = process.env.REQUEST_HOST;
let isInvalid = false;
let timeout = false;
// 处理异常的方法
function handleError(res) {
    let msg = res.message;
    if (res.status === 415) { // 已存在或被引用
    } else if (res.status === 500) { // 服务端报错
    } else if (res.status === 4001) { // 登录失效
        msg = `${msg}, 前往登录?`;
    }
    Modal.warning({
        title: '提示',
        content: msg,
        onOk: () => {
            isInvalid = false;
        }
    });
    setTimeout(() => {
        iView.Modal.remove();
        clearTimeout(timeout);
    }, 2000);
}

// 请求拦截
axios.interceptors.request.use(
    config => {
        config.headers = {
            'Content-Type': 'application/json',
            // "Access-Control-Allow-Headers":"*",
        };
        // 解决ie缓存不更新数据的问题
        let url = config.url;
        if (url.indexOf('http://') < 0 && url.indexOf('https://') < 0) {
            url = REQUEST_HOST + '/' + url;
        }
        if (url.indexOf('?') < 0) {
            url += '?';
        }
        url += '&r=' + Math.random();
        config.url = url;
        config.timeout = 120000; // 2分钟
        iView.LoadingBar.start();
        return config;
    },
    error => {
        iView.LoadingBar.error();
        return Promise.reject(error);
    }
);

// 响应拦截
axios.interceptors.response.use(
    res => {
        // 已存在或被引用
        if (res.data.status === 415) {
            if (!isInvalid) handleError(res.data);
            isInvalid = true;
            // 登录失效
        } else if (res.data.status === 4001) {
            if (!isInvalid) handleError(res.data);
            isInvalid = true;
            // 服务端错误
        } else if (res.data.status === 500) {
            if (!isInvalid) handleError(res.data);
            isInvalid = true;
        }
        iView.LoadingBar.finish();
        return res;
    },
    error => {
        if (error.response) {
            if (!isInvalid) handleError({ message: error.response.data.message, status: error.response.data.status });
            isInvalid = true;
        } else {
            if (error.message.includes('timeout')) {
                if (!isInvalid) handleError({ message: '请求超时，请重新操作！' });
                isInvalid = true;
            } else if (error.message.includes('Network Error')) {
                if (!isInvalid) handleError({ message: '网络错误，请稍后重试！' });
                isInvalid = true;
            }
        }
        iView.LoadingBar.error();
        return Promise.reject(error);
    }
);

// post请求
export function post (url, data) {
  return axios({
    url: url,
    data: data,
    method: 'post'
  });
}
